//
//  MainViewController.swift
//  DSWeiBo
//
//  Created by Frank Wang on 7/6/16.
//  Copyright © 2016 Frank Wang. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
//        tabBar.tintColor = UIColor.orangeColor()

////        1.创建首页
//        
//        let home = HomeTableViewController()
//        //1.1设置首页tabbar对应的数据
//        home.tabBarItem.image = UIImage.init(named: "tabbar_home")
//        home.tabBarItem.selectedImage = UIImage.init(named: "tabbar_home_highlighted")
////        home.tabBarItem.title = "首页"
//        //设置控制器对应的tabbar的颜色
//        //注意在ios7.0以前，只有文字会变，图片不会变，修改方法可以点击图片，然后选择render为original
        
//        tabBar.tintColor = UIColor.orangeColor()
//
//        
//        //1.2设置导航条对应的数据
////        home.navigationItem.title = "shouye"
//        home.title = "首页"
//        
//        //2.给首页包装一个导航控制器
//        let nav = UINavigationController()
//        nav .addChildViewController(home)
//        addChildViewController(nav)
        
       
        
        /**
         添加所有子控制器
         */
       addChildViewControllers()
    }
        /**
         添加＋号
         
         ios7.0 开始，不推荐在viewDidLoad中设置frame
         */
        override func viewWillAppear(animated: Bool) {
                super.viewWillAppear(animated)
                
                setUpBtn()
                
        }
        
        private func setUpBtn(){
                tabBar.addSubview(composeBtn)
                let width = UIScreen.mainScreen().bounds.size.width / CGFloat(viewControllers!.count)
//                let height = UIScreen.mainScreen().bounds.size.height
                
                let rect = CGRectMake(0,0, width, 44)
                composeBtn.frame = CGRectOffset(rect, 2 * width, 0)
                
        }
        
        /**
         加号监听点击，该方法，不能是私有方法。由运行循环触发的消息机制。
         */
        
        func composeBtnClick(){
                
                
                
        }
        
        private func addChildViewControllers () {
                
                //1.获取Json文件的路径
                let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
                //2.通过路径创建NSdata
                
                //thorw抛异常
                
                if let jsonPath = path {
                        let jsonData = NSData(contentsOfFile: jsonPath)
                        
                        do{
                                let dictAr = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)
                                print(dictAr)
                                
                                //在Swift遍历数组必须明确数组的类型
                                for dict in dictAr as! [[String:String]] {
                                        //报错的原因是addchileViewControll参数必须有值，但是字典是可选类型。
                                        addChildViewController(dict["vcName"]!, title: dict["title"]!, imageName: dict["imageName"]!)
                                }
                                
                        }catch{
                                print(error)
                                //本地加载
                                
                                addChildViewController("HomeTableViewController", title: "首页", imageName:"tabbar_home")
                                addChildViewController("MessageTableViewController", title:"消息", imageName: "tabbar_message_center")
                                addChildViewController("NullViewController", title: "", imageName: "tabbar_compose_icon_add")
                                addChildViewController("DiscoverTableViewController", title: "广场", imageName: "tabbar_discover")
                                addChildViewController("ProfileTableViewController", title: "我", imageName: "tabbar_profile")
                                
                        }
                        
                }
                //3.序列化JSon
                
                
                
                //4.遍历数组，动态创建控制器和设置数据

        }
//        保证方法安全加上private
        /**
         初始化自控制器
         
         - parameter childController: 控制器
         - parameter title:           控制器的标题
         - parameter image:           自控制器的图片
         */
//        private func addChildViewController(childController: UIViewController,title : String,imageName : String) {
        
        private func addChildViewController(childControllerName: String,title : String,imageName : String) {
                
                //0.将字符串转化成类
                //－1.动态夺取命名空间 CFBundleExecutable
//                ? 表示不确定有值，！不确定有值
                let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"]as! String;
                print(ns)
                
                //0.1默认情况下，命名空间就是项目的名称，但是命名空间名称是可以修改的
                let cls : AnyClass? = NSClassFromString(ns + "." + childControllerName)
                print(cls)
                
                //0.1.1通过这个类创建对象
                //0.2 将anyclass转换为指定的类型
                let vcCls = cls as! UIViewController.Type
                
                let VC = vcCls.init()
                
                print(VC)
                
                
////                <DSWeiBo.HomeTableViewController: 0x147d4eed0>
//                print(childController)
//                
                //1.1设置首页tabbar对应的数据
                VC.tabBarItem.image = UIImage.init(named:imageName)
                VC.tabBarItem.selectedImage = UIImage.init(named: imageName + "_highlighted")
                //        home.tabBarItem.title = "首页"
                //设置控制器对应的tabbar的颜色
                //注意在ios7.0以前，只有文字会变，图片不会变
                
                //1.2设置导航条对应的数据
                //        home.navigationItem.title = "shouye"
                VC.title = title
                
                //2.给首页包装一个导航控制器
                let nav = UINavigationController()
                nav .addChildViewController(VC)
                
                //将导航控制器加到当前的控制器
                addChildViewController(nav)
                
        }

        
        //懒加载，private，私有方法
        private lazy var composeBtn:UIButton = {
                let  btn = UIButton()
                btn.setImage(UIImage(named : "tabbar_compose_icon_add"), forState: UIControlState.Normal)
                btn.setImage(UIImage(named : "tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
        
                btn.setBackgroundImage(UIImage(named : "tabbar_compose_button"), forState: UIControlState.Normal)
                btn.setBackgroundImage(UIImage(named : "tabbar_compose_button_highlighted"), forState:UIControlState.Highlighted)
                
                //添加监听
                
                btn.addTarget(self, action: #selector(MainViewController.composeBtnClick), forControlEvents: UIControlEvents.TouchUpInside)
                return btn
                
           
        }()

}

//动态加载图片，过节的图片不一样。。。不在本地加载图片，向服务器请求图片。json请求，然后解析，如果服务器💲就在本地加载。


